Suppressing Flicker in Digital Images

ABSTRACT

Suppressing flicker in digital images includes deriving pixel values from a non-content area of a digital image, estimating flicker values within the non-content area, and suppressing flicker throughout the digital image based on the estimated flicker values of the non-content area.

BACKGROUND

Digital photography uses an array of light sensitive sensors to capturean image. The captured image is stored as a digital file that can betransferred to other devices, displayed in a monitor, or printed. Thedigital image can be modified in its digital format to correct forerrors, change the image's dimensions, remove unwanted portions of theimage, change the brightness of the image, and to make othermodifications.

BRIEF DESCRIPTION OF THE DRAWINGS

The accompanying drawings illustrate various examples of the principlesdescribed herein and are a part of the specification. The illustratedexamples are merely examples and do not limit the scope of the claims.

FIG. 1 is a diagram of an example of a digital photography systemaccording to the principles described herein.

FIG. 2 is a diagram of an example of flicker suppression according tothe principles described herein.

FIG. 3 is a chart of an example of an average pixel value curveaccording to the principles described herein.

FIG. 4 is a chart of an example of an undistorted pixel value curveaccording to the principles described herein.

FIG. 5 is a chart of an example of estimated flicker according to theprinciples described herein.

FIG. 6 is a diagram of an example of a method for suppressing flicker indigital images according to the principles described herein.

FIG. 7 is a diagram of an example of a flicker suppression systemaccording to the principles described herein.

FIG. 8 is a diagram of an example of a flicker suppression systemaccording to the principles described herein.

FIG. 9 is a diagram of an example of a flowchart of a process forsuppressing flicker in digital images according to the principlesdescribed herein.

DETAILED DESCRIPTION

Flicker is a phenomenon that occurs in digital images where rows in theimage have visually discernible light increases and decreasesalternating down or across the image. The flicker is caused when adigital camera takes multiple sub-frames individually at discrete timeperiods to form the overall image, and the ambient light during eachdiscrete time period has different values. This generally occurs withcameras equipped with rolling shutters that capture images in thepresence of light powered with alternating current.

The principles described herein include a method for suppressing flickerin digital images. Such a method includes deriving pixel values from anon-content area of a digital image, estimating flicker values withinthe non-content area, and suppressing flicker throughout the digitalimage based on the estimated flicker values of the non-content area. Theprinciples described herein use less computation, memory, and scanningtime to estimate and suppress flicker than other commercially availablemethods.

In the following description, for purposes of explanation, numerousspecific details are set forth in order to provide a thoroughunderstanding of the present systems and methods. It will be apparent,however, to one skilled in the art that the present apparatus, systems,and methods may be practiced without these specific details. Referencein the specification to “an example” or similar language means that aparticular feature, structure, or characteristic described is includedin at least that one example, but not necessarily in other examples.

FIG. 1 is a diagram of an example of a digital photography system (100)according to the principles described herein. In this example, thedigital photography system (100) includes a digital camera (102) that ispositioned over a platen (104) where an object is placed to bephotographed. The digital camera (102) is supported with a support arm(106) that extends to the platen (102).

A digital photography system (100) that is suitable to be used with theprinciples described herein includes the HP TopShot LaserJet Pro M275,which is available through Hewlett Packard headquartered in Palo Alto,Calif., U.S.A. However, any appropriate digital photography system (100)can be used in accordance with the principles described herein. Forexample, hand held digital cameras, scanners, copy machines, phones,other digital photography systems, or combinations thereof may be used.

Further, the light source that causes flicker to be exhibited in thedigital image may be a light source that is incorporated into thedigital photography system (100). For example, the digital photographysystem (100) may use a light source to illuminate an object within thecamera's view (107) to provide sufficient light to capture an image ofthe object. The digital photography system (100) can use a flash oranother type of light source to illuminate the object. In examples wherethe digital photography system's light source is powered withalternating current and the digital photography system (100) uses ashutter that causes more than one portion of the image to be captured atdistinct time periods, the raw data image is likely to exhibit someflicker. Since alternating current has a power level that is constantlychanging, the amount of light given off by the light source is alsoconstantly changing. While often imperceptible to the natural eye in theambient environment, alternating current light sources vary at suchrapid rates that the different light levels given off during thedifferent image scans occurring at discrete time periods cause each ofthe scanned portions of the digital image to have different intensitiesof light.

The light source that causes the flicker to be exhibited in the digitalimage may also come from light sources not incorporated into the digitalphotography system (100). For example, an image captured indoors can beaffected by a light source that is powered by an alternating current.Further, other light sources, whether man made or naturally occurring,can cause at least some degree of flicker to be exhibited in the digitalimage.

In response to capturing a digital image of an object placed on theplaten (104), the digital image is stored in an image storing engine(108) as a digital file. The image storing engine (108) may beincorporated into the hardware of the digital photography system (100)or the image storing engine (108) may be located at a remote site. Theimage storing engine (108) is in communication with a flicker estimatingengine (110) that estimates flicker in the digital image. If the flickerestimating engine (110) detects the presence of flicker, a flickerestimating engine determines the amount of flicker in the digital image.In response to determining the amount of flicker in the digital image,an image suppression engine suppresses the flicker based on thedetermined flicker amount. The image suppression engine may beincorporated into the hardware of the digital photography system (100)or image suppression engine may be located at a remote location.

In some examples, the flicker estimating engine (110) automaticallydetects flicker in response to receiving a digital image file in theimage storing engine (108). In other examples, the flicker estimatingengine (110) estimates the flicker in response to a command from a user.

The flicker estimating engine (110) identifies a non-content area of theimage that has a constant color reflectance to estimate the flickervalue for the entire image. The non-content area of the image is aportion of the image that contains just a background. In other words,the non-content area is an area of the image that does not contain thephotographed object. Because the rolling shutter of the digital cameratakes multiple scans across or down the length of the image, the flickeris exhibited in rows that either traverse down or across the image. Theentire scanned row is photographed at a single time interval and istherefore exposed to the same amount of light. As a consequence, theresulting flicker is consistent within each of the rows. The flickerestimating engine (110) determines the flicker value for the row bydetermining the flicker value of the row in the non-content area. Thus,in response to determining the flicker value in the non-content area,the flicker value for the content areas and the non-content areas can besuppressed.

The digital image file may be assigned pixel values according to a red,green, and blue (RGB) light color model. Thus, each pixel in the digitalimage has a red value component, a blue value component, and a greenvalue component that are added together to produce the appropriate colorfor each pixel. The flicker estimating engine (110) separates the red,green, and blue value components to analyze the color values separately.

The average pixel values of the rows in the non-content area portionsare plotted to form a curve that schematically represents the averagepixel value recorded from the raw data of the digital image. Such acurve forms a wave because the rows with different flicker valuesalternate between different flicker values. A curve that represents justthe pixel values without distortion from the flicker is formed byinterpolating a line that connects mid-points between the local maximumsand local minimums of the average pixel value curve. The ratio betweenthe undistorted pixel value curve and the averaged pixel value curve areestimated to be the flicker value for the entire row, not just theflicker values for the non-content area. The undistorted pixel valuecurve, the average pixel value curve, and the corresponding flickerestimation and suppression will be described in more detail later.

FIG. 2 is a diagram of an example of flicker suppression according tothe principles described herein. In this example, a raw image (200) isconverted to a flicker suppressed image (202). In the raw image (200),flicker rows (204) are generated across the entire width (206) of theraw image (200) such that the flicker rows (204) occupy space withinboth the non-content area (208) and the content area (210) of the rawimage (200).

The flicker rows (204) each represent individual scanned portions of theraw image (200) that were taken at different times while capturing theoverall image. A rolling shutter in the digital camera caused portionsof the overall image to be scanned sequentially in a direction thattravels down the length (212) of the raw image. However, each of therows (204) has a different flicker value because the light present whileeach of the rows was scanned was different. Alternating current lightsources that are either used to illuminate the image or merely presentin the ambient environment often contribute to such flicker artifacts.

The non-content area (208) of the raw image (200) is a portion of theimage that spans over at least some of the rows (204) that has aconstant color reflectance. Generally, this portion of the raw image(200) is in the image's background. In some examples where the digitalphotography system (100, FIG. 1) has a fixed distance between the platen(104, FIG. 1) and the digital camera (102, FIG. 1), the camera's view(107, FIG. 1) may include a portion of the digital photography system(100, FIG. 1) that is off the platen (104, FIG. 1) to be a non-contentarea (208). Further, the non-content area (208) may include a portion ofthe platen (104, FIG. 1). In other examples, a portion of the objectthat has a constant color reflectance is designated as the non-contentarea (208). Such an example may include white space of a page that isplaced on the platen (104, FIG. 1) to be photographed or another objectthat has a consistent color.

The flicker estimating engine (110, FIG. 1) can use a predetermined areaof the raw image to be the non-content area (208). In other examples,the flicker estimating engine (110, FIG. 1) performs an analysis todetermine which portions of the raw image (200) are suitable to be thenon-content area. In yet other examples, the flicker estimating engine(110, FIG. 1) receives user input to select the non-content area (208).The non-content area (208) can span from a few pixels wide to hundredsor thousands of pixels wide. However, the non-content area (208) shouldinclude a portion of each row for which the flicker will be suppressed.

In some examples, a single non-content area is used to estimate andsuppress the flicker. However, in other examples, multiple non-contentareas that have consistent color reflectance that are used to make acollective non-content area (208). For example, where a raw image doesnot have a first non-content area that spans all of the rows, a secondnon-content area that includes rows omitted from the first non-contentarea can provide the data about the missing rows. In such examples,further processing may be done to account to inconsistent illuminationand other factors that affect the accuracy of combining multiplenon-content areas.

The flicker is estimated on a row by row basis. In response toestimating the flicker of the non-content area (208), the pixel valuesof each pixel in the row in both the non-content area (208) and thecontent area (210) are multiplied with the same scalar factor value toadjust the entire row. Each row is multiplied with a different scalarfactor. As a consequence, the flicker suppressed image (202) will havethe flicker significantly reduced or eliminated along its length (212).In examples where flicker remains visually detectable after running theflicker estimation and suppression processes, the processes are repeatedto make further suppressions. In other examples, if some flicker remainsvisually detectable, the different processes are run to estimate andsuppress the remaining flicker. In yet other examples, if some flickerremains, a different non-content area is selected and the flickerestimation and suppression processes are rerun.

FIG. 3 is a chart (300) of an example of an average pixel value curve(302) according to the principles described herein. In this example, thex-axis (304) schematically represents the pixel index, and the y-axis(306) schematically represents the pixel value. The average pixel valuecurve (302) represents a single color channel in the RGB color model.Each of the color channels are analyzed in the same manner and theresults are combined at a later stage of processing.

In this example, the average pixel value curve (302) represents theaverage values of the pixels per row that are extracted from the rawimage (200, FIG. 2). Further, the raw data of the average pixel valuecurve (302) has been filtered to reduce noise that interferes withfinding the locations of local extremities, such as local maximums (308)and local minimums (310).

The local maximums (308) and the local minimums (310) of thenoise-reduced average signal can be detected using a first-orderdifference signal (first-order derivative) of the filtered averagesignal with the following equation:

z ^(L) _(NC)′(i)=(z ^(L) _(NC)(i+Δi)−z _(NC)(i))/Δi, 0≦i≦l−Δi−1,

where z^(L) _(NC)′(i) is the first-order difference signal of z^(L)_(NC)(i) and z^(L) _(NC)(i) represents the filtered average signalobtained with a moving average filter whose length is L, i represents apixel coordinate in the vertical direction, l is the number ofhorizontal rows, and Δi represents the increment number of pixelssampled in the equation. Such an equation identifies where the slope ofthe equation is approximately equal to zero, which identifies thelocations of the local maximums (308) and the local minimums (310).Finding a location where the slope is exactly equal to zero may be timeconsuming, thus, the identification of approximately zero can be used.

The Δi is precisely chosen because a number that is low will cause falsealarms in finding regions of the curve where the slope is approximatelyzero. On the other hand, if Δi is too large, the accuracy is reduced.Initial testing demonstrated that Δi=10 is sufficient for adequateflicker estimation.

Candidates for the local maximums (308) and local minimums (310) can beidentified by thresholding the absolute value of the difference signalwith a threshold close to zero. The set of the indices where theabsolute difference values are less than a threshold H can be defined as

l _(o) ={i|∥z ^(L) _(NC)′(i)∥<H}

However, the threshold cannot accurately identify the candidates for thelocal maximums (308) and local minimums (310) of the filtered averagesignal for all images because low-luminance images have relatively smalldifferences between the neighboring pixels compared to high-luminanceimages. Flickering of the ambient light source multiplicatively changesthe pixel values of the scanned image because the luminance sensed bythe imaging sensors of digital cameras is equal to the illuminationcoming from the ambient light multiplied by the surface reflectance ofthe target object being photographed. Therefore, the pixel-to-pixeldifference in regions of high luminance is greater than thepixel-to-pixel difference in regions of low luminance, given a constantvalue for the surface reflectance. Consequently, the difference signalwill have relatively small values in dark regions compared to brightregions. A modified equation that computes the difference signal inorder that the same threshold can be applied to an image at any level ofluminance is expressed as follows:

z ^(L) _(NC)′(i)=(z ^(L) _(NC)(i+Δi)−z ^(L) _(NC)(i))/(z ^(L)_(NC)(i+Δi)+z ^(L) _(NC)(i)), 0≦i≦l−Δi−1,

This equation divides the difference between the two pixel values by thesum of those two values instead of by the distance between the twopixels. This spatial distance is just a constant that effectively has noimpact when the computed difference signal is thresholded, but thedifference divided by the sum indicates the change between the pixelvalues relative to the background luminance.

While this example is described with reference to specific equations andmechanisms for identifying the local maximums (308) and local minimums(310) of the filtered average signal, any appropriate equation ormechanism may be used in accordance with the principles describedherein. Further, any appropriate mechanism or equation to filter thenoise from the average pixel value curve may be used in accordance withthe principles described herein.

FIG. 4 is a chart (401) of an example of an undistorted pixel valuecurve (400) according to the principles described herein. In thisexample, the x-axis (402) schematically represents the pixel index, andthe y-axis (404) schematically represents the pixel value. Theundistorted pixel value curve (400) represents the pixel values withoutdistortion caused by flicker. The undistorted pixel value curve (400)can be interpolated by connecting mid-points (406) between the localmaximums (408) and local minimums (410).

The goal of interpolating the undistorted pixel value curve (400) is todetermine a smooth function to be regarded as the spatial variation ofthe illumination in the rows in the absence of flicker. To accomplishthis, the set of detected coordinates that exhibits approximately zeroslope is clustered to define the local maximums (408) and local minimums(410). The k-th cluster of the local maximums (408) and local minimums(410) is expressed as the k-th true location as C_(k) where k isnumbered in ascending order of the distance from the origin of the iaxis to the cluster. An ordered set C_(k)={i^(k) ₀, i^(i) ₁, . . . i^(k)_(n), i^(i) _(n+1)} whose elements are also in the ascending order of isatisfies the following criterion:

C _(k) {i ^(k) _(n) , i ^(k) _(n+1) |∥i ^(k) _(n+1) −i ^(k)_(n)(i)∥≦Δi/2, and i ^(k) _(n) , i ^(i) _(n+1) ∈l _(o)}

where Δi is the increment of pixel index.

The clusters represent the locations where the pixel values aremaximally amplified or attenuated by the flicker. On the other hand, thepixel values are expected to be minimally affected by the flicker midwaybetween two neighboring clusters. Accordingly, we assume that the pixelvalue at the mid-point (406) between two neighboring clusters isundistorted by the flicker, and at this point the multiplicative scalefactor accounting for the increase or decrease by the flicker artifactis unity. The location of the k-th mid-point between clusters C_(k) andC_(k+1) can be computed as

${m_{k} = {\left( {{\max \left\{ C_{k} \right\}} + {\min \left\{ C_{k + 1} \right\}}} \right)/2}},{{{or}m_{k}} = {{{1/\left( {2{C_{k}}} \right)}{\sum\limits_{i \in C_{k}}^{\;}\; i}} + {{1/\left( {2{C_{k + 1}}} \right)}{\sum\limits_{i \in C_{k + 1}}\; i}}}}$

The first equation defines the mid-point (406) as the point locatedhalfway between the end point of a left cluster and a start point of aright cluster. On the other hand, the second equation defines themid-point as the point located midway between centroids of the left andright clusters. In the experimental results, no significant differencewas observed in the quality of the flicker-reduced images that resultedfrom the use of either of these two equations to compute the mid-points.The mid-points are used as the knots for the interpolation process.

In some examples, cubic spline interpolation is used to form theundistorted pixel value curve (400). However, any appropriateinterpolation technique may be used in accordance with the principlesdescribed herein. During initial testing, the knots are set to themid-points between the clusters representing the local maximums (408)and local minimums (410) to draw a smooth curve corresponding to thepixel values in the absence of distortion from flicker. Without settingthe end knots, unexpected splines can be obtained for the intervalsoutside the first mid-point and outside the last mid-point. That isbecause the left knot does not exist at the left end of the intervaloutside the first mid-point and the right knot does not exist at theright end of the interval outside the last mid-point. Adding the firstindex (i=0) and last index (i=l−1) of i to the set of knots preventsthis issue from occurring. The alternative set of knots for the cubicspline interpolation is

K={0, m_(o), . . . , m_(k), . . . , l−1}

Then the cubic-spline-interpolated curve can be obtained as

s(i)=spline(K, z ^(L) _(NC)(K), i), 0≦i≦l−Δi−1,

where spline ( ) is the cubic spline interpolator having three inputarguments: the set of pixel indexes of knots, the set of pixel grayvalues of the noise-reduced average signal at the knots, and the pixelindex or indices where the signal is to be interpolated.

While this example has been described with reference to specificmechanisms and equations for determining the mid-points, any appropriatemechanism or equation for determining the mid-points may be used.Further, while this example is described with reference to specificmechanisms and equations for creating an undistorted pixel value curve,any appropriate mechanism or equation may be used in accordance with theprinciples described herein.

FIG. 5 is a chart (500) of an example of estimated flicker according tothe principles described herein. In this example, the x-axis (502)schematically represents the pixel index, and the y-axis (504)schematically represents a multiplicative scalar factor.

The estimated flicker is an array of multiplicative scale factors givenby the ratio of components in the average pixel value curve (302, FIG.3) computed from the non-content area and the components of theundistorted pixel value curve (400, FIG. 4). Therefore, themultiplicative model of the estimated flicker signal is given by:

f(i)=(Y _(NC)(i))/s(i), 0≦i≦l−1,

where Y_(NC)(i) is the average pixel value taken along the scandirection of the non-content area. Thus, the estimated f(i) can beinterpreted as the amount of multiplicative amplification or attenuationof the pixel value at the i-th row caused by the flicker.

The peaks (506) and valleys (508) of the curve (510) schematicallyrepresent the value of the multiplicative scale factor for each of therows. In response to estimating the flicker of the non-content area, theflicker can be suppressed globally across the entire flicker distortedimage. Each of the rows is divided by its corresponding multiplicativescale factor f(i) to cause the row's pixels to display pixel values thatare undistorted by flicker. Therefore, the suppression process can beimplemented as

(i,j)=y(i,j)/f(i) 0≦i≦l−1, 0≦j≦J−1,

where j represents the coordinate in the horizontal direction, Jrepresents the number of vertical rows, and

(i, j) represents an estimate of the flicker-suppressed image.

While this example has been described with reference to specificmechanisms and equations for estimating flicker, any appropriatemechanism and/or equation may be used to estimate flicker. Further,while this example has been described with reference to specific ways tosuppress flicker, any appropriate mechanism for suppressing the flickerthroughout the image may be used in accordance with the principlesdescribed herein.

FIG. 6 is a diagram of an example of a method (600) for suppressingflicker in digital images according to the principles described herein.In this example, the method (600) includes deriving (602) pixel valuesfrom a non-content area of a digital image, estimating (604) flickervalues with the non-content area, and suppressing (606) flickerthroughout the digital image based on the estimated flicker values ofthe non-content area.

Estimating the flicker values within the non-content area may includeanalyzing each of the color channels of a RGB color model of the pixelvalues individually. Further, an average pixel value curve can bedetermined that maps the pixel values averaged along a directionperpendicular to the flicker within the non-content area for each of thecolor channels. In such an average pixel value curve, the local maximumsand local minimums are identified and the undistorted pixel value curveis interpolated by connecting mid-points between the local maximums andlocal minimums. Accordingly, the pixel values are adjusted across theentire width of each row based on the estimated flicker in thenon-content area. Thus, the flicker estimated in the non-content area isused for suppressing flicker in both the non-content area and thecontent areas of the image.

FIG. 7 is a diagram of an example of a flicker suppression system (700)according to the principles described herein. The flicker suppressionsystem (700) includes a photographing engine (702), a non-content areaengine (703), a pixel value engine (704), an average pixel value curveengine (706), a local extremity engine (708), an undistorted pixel valueengine (710), a flicker estimation engine (712), and a flickersuppression engine (714). The engines (702, 703, 704, 706, 708, 710,712, 714) refer to a combination of hardware and program instructions toperform a designated function. Each of the engines (702, 703, 704, 706,708, 710, 712, 714) may include a processor and memory. The programinstructions are stored in the memory and cause the processor to executethe designated function of the engine.

The photographing engine (702) captures an image of an object. Thenon-content area engine (703) determines the non-content area of the rawdigital image by locating a portion of the image that spans all of therows affected by flicker that has a constant color reflectance. Thepixel value engine (704) determines the pixel values from the image'sraw data stored in an image file. The average pixel value curve engine(706) determines a curve that depicts the relationship between theaverage pixel values per row and the location of the pixels. The localextremity engine (708) indentifies the local maximums and the localminimums on the average pixel value curve.

The interpolation engine (710) determines a curve that represents thevalue of the pixels without distortion caused by flicker. Theinterpolation engine (710) may interpolate the curve that intersects themid-points between the local maximums and the local minimums on theaverage pixel value curve. The flicker estimation engine (712) estimatesthe flicker based on the undistorted curve relationship to the averagepixel value curve. The flicker estimation engine (712) generates a scalefactor value for each of the rows of the captured image. The flickersuppression engine (714) suppresses the flicker in each row. The flickersuppression engine (714) suppresses the flicker across both thenon-content areas and the content areas of each row. The flickersuppression engine (714) divides the scale factor value determined withthe flicker estimation engine (712) by the pixel values of each row tosuppress the flicker.

FIG. 8 is a diagram of an example of a flicker suppression system (800)according to the principles described herein. In this example, theflicker suppression system (800) includes processing resources (802)that are in communication with memory resources (804). Processingresources (802) include at least one processor and other resources usedto process programmed instructions. The memory resources (804) representgenerally any memory capable of storing data such as programmedinstructions or data structures used by the flicker suppression system(800). The programmed instructions shown stored in the memory resources(804) include a non-content area identifier (808), a pixel value deriver(810), an average pixel value curve determiner (812), local extremityidentifier (814), a mid-point identifier (816), an undistorted pixelvalue curve determiner (818), a flicker value estimator (820), a scalefactor determiner (822), and a flicker row divider (824). The datastructures shown stored in the memory resources (804) include a rawimage file library (806).

The memory resources (804) include a computer readable storage mediumthat contains computer readable program code to cause tasks to beexecuted by the processing resources (802). The computer readablestorage medium may be tangible and/or non-transitory storage medium. Thecomputer readable storage medium may be any appropriate storage mediumthat is not a transmission storage medium. A non-exhaustive list ofcomputer readable storage medium types includes non-volatile memory,volatile memory, random access memory, memristor based memory, writeonly memory, flash memory, electrically erasable program read onlymemory, or types of memory, or combinations thereof.

The non-content area identifier (808) represents programmed instructionsthat, when executed, cause the processing resources (802) to identify anon-content area of an image from the raw image file library (806). Thepixel value curve deriver (810) represents programmed instructions that,when executed, cause the processing resources (802) to derive the pixelrows of each row within the non-content area. The average pixel valuecurve determiner (812) represents programmed instructions that, whenexecuted, cause the processing resources (802) to average the pixels perrow and to plot the average pixel values to make an average pixel valuecurve.

The local extremity identifier (814) represents programmed instructionsthat, when executed, cause the processing resources (802) to identifythe local maximums and local minimums of the average pixel value curve.The local extremity identifier (814) may determine the locations of theaverage pixel value curve that have approximately zero slope to identifythe locations of the local maximums and local minimums. In someexamples, just selected pixel coordinates along the average pixel valuecurve are evaluated to determine their slopes. In such examples, acoordinate with zero slope may be difficult identify. In such examples,the adjacent selected coordinates are clustered together andcollectively function as either a local maximum or local minimum.

The mid-point identifier (816) represents programmed instructions that,when executed, cause the processing resources (802) to identify themid-points between the local maximums or local minimums. The undistortedpixel value curve determiner (818) represents programmed instructionsthat, when executed, cause the processing resources (802) to determinean undistorted pixel value curve by forming a curve that intersects themid-points of the average pixel value curve. The flicker value estimator(820) represents programmed instructions that, when executed, cause theprocessing resources (802) to estimate the flicker value based on theratios between the average pixel value curve and the undistorted pixelvalue curve. The flicker row divider (824) represents programmedinstructions that, when executed, cause the processing resources (802)to divide each row's flicker values by the corresponding scale factors.Such division adjusts the pixels in the digital image to be a value thatis undistorted by the flicker value. Such adjustments suppress theflicker throughout the image.

Further, the memory resources (804) may be part of an installationpackage. In response to installing the installation package, theprogrammed instructions of the memory resources (804) may be downloadedfrom the installation package's source, such as a portable medium, aserver, a remote network location, another location, or combinationsthereof. Portable memory media that are compatible with the principlesdescribed herein include DVDs, CDs, flash memory, portable disks,magnetic disks, optical disks, other forms of portable memory, orcombinations thereof. In other examples, the program instructions arealready installed. Here, the memory resources can include integratedmemory such as a hard drive, a solid state hard drive, or the like.

In some examples, the processing resources (802) and the memoryresources (804) are located within the same physical component, such asa server, or a network component. The memory resources (804) may be partof the physical component's main memory, caches, registers, non-volatilememory, or elsewhere in the physical component's memory hierarchy.Alternatively, the memory resources (804) may be in communication withthe processing resources (802) over a network. Further, the datastructures, such as the libraries and may be accessed from a remotelocation over a network connection while the programmed instructions arelocated locally. Thus, the flicker suppression system (800) may beimplemented on a user device, on a server, on a collection of servers,or combinations thereof.

The flicker suppression system (800) of FIG. 8 may be part of a generalpurpose computer. However, in alternative examples, the flickersuppression system (800) is part of an application specific integratedcircuit.

FIG. 9 is a diagram of an example of a flowchart (900) of a process forsuppressing flicker in digital images according to the principlesdescribed herein. In this example, the process includes photographing(902) an image with a digital camera having a rolling shutter deriving(904) pixel values from the image and creating (906) an average pixelvalue curve.

The process also includes determining (908) whether the image has adetectable amount of flicker. If there is no detectable amount offlicker, the process ends (910). On the other hand, if flicker isdetected, the process includes identifying (912) the local maximums andlocal minimums on the average pixel value curve. The mid-points betweenthe local maximums and local minimums are also identified (914) and anundistorted pixel value curve is created (916) by forming a curve thatconnects the identified mid-points.

The flicker values are estimated (918) by determining ratiorelationships between the average pixel value curve and the undistortedpixel value curve. The process also includes adjusting (920) the flickeracross the entire row on a row by row basis according to the estimatedflicker value. In some examples, the flicker is adjusted on a row by rowbasis by dividing the row's pixel values by a scale factor determinedfor each row that causes the pixels to have a value that is undistortedby the flicker.

While the examples above have been described with reference to specificmechanisms for capturing a digital image, any appropriate mechanism forcapturing an image may be used in accordance with the principlesdescribed herein. For example, the digital image may be taken with a HPTopShot LaserJet device as described above, a mobile phone, a digitalcamera, a scanning device, another digital photography system, orcombinations thereof. Further, while the examples above have beendescribed with reference to specific kinds of non-content areas andspecific mechanisms for identifying the non-content areas, any mechanismfor identifying a non-content area or type of non-content area may beused in accordance with the principles described herein.

While the examples above have been described with reference to specificmechanisms for detecting flicker, any appropriate mechanism fordetecting flicker may be used in accordance with the principlesdescribed herein. While the examples above have been described withreference to specific curves for estimating the flicker, any appropriatevariations to these curves in accordance with the principles describedherein may be used. Further, while the examples above have beendescribed with reference to specific ratios for creating multiplescales, any appropriate relationship may be used to derive a mechanismfor adjusting the flicker. Also, while the examples above have beendescribed with reference to specific mechanisms for estimating andsuppressing flicker, any appropriate mechanisms for estimating andsuppressing flicker may be used.

The preceding description has been presented only to illustrate anddescribe examples of the principles described. This description is notintended to be exhaustive or to limit these principles to any preciseform disclosed. Many modifications and variations are possible in lightof the above teaching.

What is claimed is:
 1. A method of reducing flicker in digital images,comprising: estimating flicker values within a first area of a digitalimage, wherein the first area of the digital image is a non-content areaof the digital image in which only a background is visible; and reducingflicker in a second area of the digital image based on the estimatedflicker values of the first area.
 2. The method of claim 1, wherein thefirst area has a consistent color.
 3. The method of claim 1, whereinflicker in the digital image is patterned.
 4. The method of claim 3,wherein flicker in the digital image is linear.
 5. The method of claim3, wherein flicker in the digital image is periodic.
 6. The method ofclaim 1, wherein estimating flicker values within a first area of adigital image includes estimating flicker values using a component ofpixels located in the first area of the digital image, where thecomponent is selected from a group comprising: red value component,green value component, and blue value component.
 7. The method of claim1, wherein reducing flicker in a second area of the digital image basedon the estimated flicker values of the first area includes extrapolatingflicker values for the second area of the digital image from estimatedflicker values within the first area of the digital image.
 8. The methodof claim 7, wherein reducing flicker in a second area of the digitalimage based on the estimated flicker values of the first area includesmodifying the second area of the digital image using the extrapolatedflicker values for the second area.
 9. A system for adjusting forflicker in digital images, comprising: a calculating engine to calculateflicker values within a first portion of a digital image, wherein thefirst portion of the digital image has a constant color; and anadjusting engine to adjust a second portion of the digital image basedon the calculated flicker values of the first portion of the digitalimage.
 10. The system of claim 9, wherein the calculating enginecalculates an average pixel value for a linear arrangement of pixels inthe first portion of the digital image.
 11. The system of claim 10,wherein the calculating engine generates a curve comprising a pluralityof average pixel values for linear arrangements of pixels in the firstportion of the digital image.
 12. The system of claim 11, wherein thecalculating engine calculates local contributions to the curve.
 13. Thesystem of claim 12, wherein the calculating engine extrapolates a localcontribution to the curve to a second area of the digital image that isin line with the linear arrangement of pixels used to calculate thelocal contribution.
 14. A computer program product for diminishingflicker in digital images, comprising: a non-transitory computerreadable storage medium, the non-transitory computer readable storagemedium comprising computer readable program code embodied therewith, thecomputer readable program code comprising program instructions that,when executed, causes a processor to: identify a digital image to beprocessed, wherein the digital image includes a plurality of pixels; fora linear region of pixels that contains content and non-content areas,average a plurality of pixels from the linear region to produce anaverage pixel value for the linear region, wherein the averaged pixelsare part of a non-content area of the digital image in which only abackground, and not any foreground object, is visible; determine theflicker contribution to a linear region by comparing the average pixelvalue for the linear region and a modeled value based on a set ofaveraged pixel values for multiple linear regions in the non-contentarea.
 15. The computer program product of claim 14, further comprisingcomputer readable program code comprising program instructions that,when executed, cause the processor to diminish flicker in a second areaof the digital image by modifying values of pixels in a linear regionusing the determined flicker contribution for that linear region. 16.The computer program product of claim 14, further comprising computerreadable program code comprising program instructions that, whenexecuted, cause the processor to calculate a flicker contribution for asecond area of the digital image based on a pattern of flicker in thenon-content area of the digital image.
 17. The computer program productof claim 16, further comprising computer readable program codecomprising program instructions that, when executed, cause the processorto diminish flicker in the second area of the digital image.
 18. Thecomputer program product of claim 17, further comprising computerreadable program code comprising program instructions that, whenexecuted, cause the processor to store the modified image to a memory.19. The computer program product of claim 14, further comprisingcomputer readable program code comprising program instructions that,when executed, cause the processor to generate a curve representing thepixel values without flicker in a portion of the non-content area. 20.The computer program product of claim 19, wherein the curve is generatedusing a middle portion of a range of pixel values produced by flicker.